package net.oschina.app.adapter;

import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;

import net.oschina.app.base.BaseFragment;

import java.util.ArrayList;
import java.util.List;

//创建一个片段的页面适配器,继承FragmentStatePagerAdapter
    public class BaseVPAdapter extends FragmentStatePagerAdapter {
    private final Context context;
    //片段的类的字节码集合
        private List<Class<? extends BaseFragment>> clazzs=new ArrayList<>();
        private List<String> tabTitls=new ArrayList<>(); //页签的标题集合
        private List<Bundle> bundles=new ArrayList<>(); //要传给片段对象的bundle的集合

        //对外提供一个添加tab的方法
        public void addTab(String tabTitle,Class<? extends  BaseFragment> clz,Bundle bundle){
            clazzs.add(clz);
            tabTitls.add(tabTitle);
            bundles.add(bundle);
            notifyDataSetChanged();
        }

        //对外提供一个清除集合数据的方法
        public void  clear(){
            clazzs.clear();
            tabTitls.clear();
            bundles.clear();
            notifyDataSetChanged();
        }

        //对外提供一个添加片段的方法
/*        public void addFragment(BaseFragment fragment){
            fragments.add(fragment);
            notifyDataSetChanged();//发一个数据改变的通知
        }*/


        public BaseVPAdapter(FragmentManager fm,Context context) {
            super(fm);
            this.context = context;
        }
        //取得当前要展示的片段对象
        @Override
        public Fragment getItem(int position) {
            /**通过类的字节码来实例化片段
             * context：上下文
             * fname：类的名称，通过类的class字节码可以获取
             * bundle：要向片段对象传递的参数
             */
            Fragment fragment=Fragment.instantiate(context,clazzs.get(position).getName(),bundles.get(position));
            return fragment;
        }

        //取得要装配的页面的数量
        @Override
        public int getCount() {
            return clazzs.size();
        }
        //取得页面标题， Tablayout的页签标题要依赖该方法
        @Override
        public CharSequence getPageTitle(int position) {
            return tabTitls.get(position);
        }
    }